package pe.tnova.cliente.proyecto.core.daobase;

import java.util.Date;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.EntityManager;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Query;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Repository;

import pe.tnova.cliente.proyecto.core.dao.AsientoDAO;
import pe.tnova.cliente.proyecto.core.dao.impl.AsientoDAOImpl;
import pe.tnova.cliente.proyecto.core.daobase.impl.AsientoDAOBase;
import pe.tnova.cliente.proyecto.core.dominio.Asiento;
import pe.tnova.cliente.proyecto.core.dominio.Estadio;
import pe.tnova.core.db.DAO;

@SuppressWarnings({"unchecked","unused","rawtypes"})
@Repository("AsientoDAOBase")
public class AsientoDAOBaseImpl extends DAO<Asiento>  implements AsientoDAOBase {

	private static final Logger logger = LoggerFactory.getLogger(AsientoDAOBase.class);
	
	private static String STR_MENSAJE_SIN_REGISTROS_EXCEPTION = "No hay registro.";
	private static String STR_MENSAJE_ERROR_EXCEPTION = "Error en la la conexion.";
	
	private static String SQL_ENTIDAD = " Asiento ";
	private static String ENTIDAD_ID = "id"; 
	private static String ENTIDAD_NUMERO = "numero"; 
	private static String ENTIDAD_TRIBUNA = "tribuna"; 
	private static String ENTIDAD_ESTADIO = "estadio"; 
	private static String ENTIDAD_ACTIVO = "activo"; 
	private static String ENTIDAD_CODIGOUSUARIO = "codigoUsuario"; 
	private static String ENTIDAD_FECHAREGISTRO = "fechaRegistro"; 
	private static String ENTIDAD_FECHAACTUALIZADA = "fechaActualizada"; 	
	
	private static String SQL_QUERY = " select p from "+SQL_ENTIDAD+" p ";
	private static String SQL_WHERE = " where ";
	private static String SQL_SUFIJO_ENTIDAD = " p.";
	private static String SQL_FILTRO = ":";
	private static String SQL_MENOS = " < ";
	private static String SQL_MAS = " > ";
	
	private static String SQL_QUERY_CONSTRUCTOR_ID = " select new Asiento(p.id) from Asiento p ";
	
	
	public List<Asiento> getListaAsiento(Asiento filtro) throws Exception {
		Query q = null;
		if(filtro!=null){
			strbfSqlQuery = new StringBuffer();
			strbfSqlQuery.append(SQL_QUERY);
			if(filtro.getId()!=null){
				addFiltro(SQL_QUERY,ENTIDAD_ID);
			}
			if(filtro.getNumero()!=null){
				addFiltro(SQL_QUERY,ENTIDAD_NUMERO);
			}
			q = entityManager.createQuery(strbfSqlQuery.toString());
		}else{
			q = entityManager.createQuery(SQL_QUERY);
		}
		
		List<Asiento> p = q.getResultList();
		if(p!=null){
			return p;
		}else{
			throw new Exception("No hay regsitros.");
		}
	}


	private void addFiltro(String sqlQuery, String campoFiltro) {
		if(sqlQuery.indexOf(SQL_WHERE.trim())==0){
			sqlQuery +=  sqlQuery+SQL_WHERE;
		}	
		sqlQuery += SQL_FILTRO+SQL_SUFIJO_ENTIDAD +campoFiltro;
	}
	
	

}